package com.lqian;

import java.lang.reflect.Method;

@InvokAnno(className = "com.lqian.Cat2",methodName = "say")
public class TestInvokAnnoMain {
    public static void main(String[] args) throws Exception {
        // 获取类对象
        Class<TestInvokAnnoMain> clazz = TestInvokAnnoMain.class;

        // 获取类对象中的注解
        InvokAnno an = clazz.getAnnotation(InvokAnno.class);
        /**
         * 注解本质是接口， 获取到的其实是接口的实现
         *   public interface InvokAnno  extends java.lang.annotation.Annotation{
         *      String className(){
         *          return "com.lqian.Cat"
         *      }
         *
         *      String methodName(){
         *          return "say"
         *      }
         *
         *   }
         *
         */
        String className = an.className();
        String methodName = an.methodName();
        //通过放射的方式 实现接口的功能
        Class<?> aClass = Class.forName(className);
        Method method = aClass.getDeclaredMethod("say");

        //方法执行
        Object o = aClass.newInstance();
        method.invoke(o);

        //读取注解中对应的属性


    }
}
